开源框架中的反射工具
在很多开源框架中都用到了反射,因此这些框架中都包含了很多的反射工具类,我们可以很方便 的直接只用这些工具类,而不用自己再去重新定义。下面介绍几个常用框架中包含的反射工具类。
org.springframework:spring-core
org.apache.commons:commons-lang3
cn.hutool:hutool-all
下面列举一些反射工具类,但是不介绍其具体方法的使用。
Spring-Core
org.springframework.util.ReflectionUtils
org.springframework.util.ClassUtils
org.springframework.core.annotation.AnnotationUtils
org.springframework.util.TypeUtils
org.springframework.beans.BeanUtils
org.springframework.beans.BeanUtils
其实是一个反射与内省(Introspector)结合的工具类。内部提供了实例拷贝、获取方法、字段等功能。
提示
如果你看过这些工具类的源码,就会发现这些类都被定义为了抽象类(abstract class)。之所以这样做是为了保证这些工具类在使用的时候不能够被实例化。因为工具类提供的方法都是静态方法,虽然实例化之后也是可以调用的,但是这并不是一种好的写法。
定义为抽象类还有一个问题是,这个类是可以被继承的。一般情况下我们不建议一个工具类继承另一个工具类。这时为了完全杜绝这些问题可以使用下面的方式定义工具类。
public final class XxxxUtils {
private XxxxUtils() {
}
}
用 final
来阻止继承,用私有的构造函数来阻止实例化。
commons-lang3
org.apache.commons.lang.reflect.ConstructorUtils
org.apache.commons.lang.reflect.FieldUtils
org.apache.commons.lang.reflect.MemberUtils
org.apache.commons.lang.reflect.MethodUtils
Hutool
cn.hutool.core.util.ReflectUtil
cn.hutool.core.lang.reflect.MethodHandleUtil